<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if (!function_exists("show_message")) {
	function show_message($message, $url, $waitSecond = 1) {
		$jumpUrl = $url;
		$CI =& get_instance();
		ob_start();
		include(APPPATH.'views/common/message.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		echo $buffer;
		exit;
	}
}

if (!function_exists("authcode")) {
	//from http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/06/09/1754718.html
	// 参数解释   
	// $string： 明文 或 密文   
	// $operation：DECODE表示解密,其它表示加密   
	// $key： 密匙   
	// $expiry：密文有效期   
	function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {   
	    // 动态密匙长度，相同的明文会生成不同密文就是依靠动态密匙   
	    $ckey_length = 4;   
	       
	    // 密匙   
	    $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);   
	       
	    // 密匙a会参与加解密   
	    $keya = md5(substr($key, 0, 16));   
	    // 密匙b会用来做数据完整性验证   
	    $keyb = md5(substr($key, 16, 16));   
	    // 密匙c用于变化生成的密文   
	    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';   
	    // 参与运算的密匙   
	    $cryptkey = $keya.md5($keya.$keyc);   
	    $key_length = strlen($cryptkey);   
	    // 明文，前10位用来保存时间戳，解密时验证数据有效性，10到26位用来保存$keyb(密匙b)，解密时会通过这个密匙验证数据完整性   
	    // 如果是解码的话，会从第$ckey_length位开始，因为密文前$ckey_length位保存 动态密匙，以保证解密正确   
	    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;   
	    $string_length = strlen($string);   
	    $result = '';   
	    $box = range(0, 255);   
	    $rndkey = array();   
	    // 产生密匙簿   
	    for($i = 0; $i <= 255; $i++) {   
	        $rndkey[$i] = ord($cryptkey[$i % $key_length]);   
	     }   
	    // 用固定的算法，打乱密匙簿，增加随机性，好像很复杂，实际上对并不会增加密文的强度   
	    for($j = $i = 0; $i < 256; $i++) {   
	        $j = ($j + $box[$i] + $rndkey[$i]) % 256;   
	        $tmp = $box[$i];   
	        $box[$i] = $box[$j];   
	        $box[$j] = $tmp;   
	     }   
	    // 核心加解密部分   
	    for($a = $j = $i = 0; $i < $string_length; $i++) {   
	        $a = ($a + 1) % 256;   
	        $j = ($j + $box[$a]) % 256;   
	        $tmp = $box[$a];   
	        $box[$a] = $box[$j];   
	        $box[$j] = $tmp;   
	        // 从密匙簿得出密匙进行异或，再转成字符   
	        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));   
	     }   
	    if($operation == 'DECODE') {   
	        // substr($result, 0, 10) == 0 验证数据有效性   
	        // substr($result, 0, 10) - time() > 0 验证数据有效性   
	        // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性   
	        // 验证数据有效性，请看未加密明文的格式   
	        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {   
	            return substr($result, 26);   
	         } else {   
	            return '';   
	         }   
	     } else {   
	        // 把动态密匙保存在密文里，这也是为什么同样的明文，生产不同密文后能解密的原因   
	        // 因为加密后的密文可能是一些特殊字符，复制过程可能会丢失，所以用base64编码   
	        return $keyc.str_replace('=', '', base64_encode($result));   
	     }   
	}  
}

if (!function_exists("getinterfacenames")) {
	 function getinterfaceflag($stuID){                                                                                                                                                                                                                                                                                                                                                                                        
        $interfaceflag = -1;
        $handle = @fopen( "http://portal.hdu.edu.cn/eapdomain/peopleservlet?id=".$stuID."&key=hduredhome2007neusoft", "r" );
        if ( $handle )
        {                            
            $contents = fread( $handle, 2048 );
            $contents = iconv('GBK','UTF-8',$contents);
            if ( preg_match( "/<user_type>(\\d)<\\/user_type><user_id>(.+?)<\\/user_id><user_name>(.+?)<\\/user_name><user_birth>(.+?)<\\/user_birth><user_depart>(.+?)<\\/user_depart><user_special>(.+?)<\\/user_special>/i", $contents, $matches ) )
            {
                $result = array(
                    'user_type' => intval( $matches[1] ),
                    'user_id' => $matches[2],
                    'user_name' => $matches[3],
                    'user_birth' => $matches[4],
                    'user_depart' => $matches[5],
                    'user_special' => $matches[6],
                    'interfaceflag' => 1,
                );
            }
            else if ( preg_match( "/<user_type>(\\d)<\\/user_type><user_id>(.+?)<\\/user_id><user_name>(.+?)<\\/user_name><user_birth>(.+?)<\\/user_birth><user_depart>(.+?)<\\/user_depart>/i", $contents, $matches ) )
            {
                $result = array(
                    'user_type' => intval( $matches[1] ),
                    'user_id' => $matches[2],
                    'user_name' => $matches[3],
                    'user_birth' => $matches[4],
                    'user_depart' => $matches[5],
                    'interfaceflag' => 1,
                );
            }
				else if ( preg_match( "/<user_type>(\\d)<\\/user_type><user_id>(.+?)<\\/user_id><user_name>(.+?)<\\/user_name><user_birth><\\/user_birth><user_depart>(.+?)<\\/user_depart><user_special>(.+?)<\\/user_special>/i", $contents, $matches ) )
            {
                $result = array(
                    'user_type' => intval( $matches[1] ),
                    'user_id' => $matches[2],
                    'user_name' => $matches[3],
                    'user_birth' => '',
                    'user_depart' => $matches[4],
                    'interfaceflag' => 1,
                );
            }
            else
            {
            	//无法通过学号查询到结果
                $result['interfaceflag'] = -1;
            }
        }
        else{
        	//表示无法连接
        	$result['interfaceflag'] = -2;
        }
        return $result;
    }
}

if (!function_exists("format_preg_string")) {
	function format_preg_string($string) {
		if (!is_string($string)) {
			return false;
		}

		$arr = array("/", ".", "^", "$", "+");
		$t = "";
		for($i = 0; $i < strlen($string); $i++){
			if (in_array($string[$i], $arr))
			{
				$t .= "\\".$string[$i];
			} else {
				$t .= $string[$i];
			}
		}
		return $t;
	}
}

if (!function_exists("curl_json")) {
	function curl_json($apiUrl){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $apiUrl);
	    curl_setopt($ch, CURLOPT_HEADER, 1);
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	    $content = curl_exec($ch);
	    curl_close($ch);
	    $pattern = "/(\{.*\})/ui";
	    preg_match($pattern, $content, $match);
	    if (isset($match[0])) {
	    	return json_decode($match[0]);
	    } else {
	    	return false;
	    }	    
	}
}
if (!function_exists("checkLibPassword")) {
	function checkLibPassword($stuID, $password) {
		$CI =& get_instance();

		$apiUrl = $CI->config->item("libPasswordApiUrl").$stuID."/".$password;
		$json = curl_json($apiUrl);

		if (empty($json) || $json->{"status"} == 0) {
			return false;
		} else {
			return true;
		}
	}
}

if (!function_exists("checkHduPassword")) {
	function checkHduPassword($stuID, $password) {
		$CI =& get_instance();
		$apiUrl = $CI->config->item("hduPasswordApiUrl")."?stuno=".$stuID."&jxgl_pwd=".$password;
		$json = curl_json($apiUrl);

		if (empty($json) || $json->{"status"} == 2 || $json->{"message"} == "Verify Error.") {
			return false;
		} else {
			return true;
		}
	}
}

//红色家园密码加密方式
if (!function_exists("rd_encode_password")) {
	function rd_encode_password($password, $key = "glsjf2df24wt24") {
		return md5( md5( $password )."md5keybyzkmforpasswd200612" );
	}
}

//json的格式化，为什么要写这个，总之就写了
if (!function_exists("formed_json_data")) {
	function formed_json_data($status, $message, $data = array()) {
		$jsonData= array(
			"status" => $status,
			"message" => $message,
			"data" => $data
			);
		return json_encode($jsonData);
	}
}

if (!function_exists("getRandomString")) {
	function getRandomString($len = 5) {
		$chars = array( 
        	"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",  
	        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",  
	        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",  
	        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",  
	        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",  
	        "3", "4", "5", "6", "7", "8", "9" 
   		); 
   		$l = count($chars);
   		$c = "";
   		for ($i = 0; $i < $len; $i++) {
   			$c .= $chars[mt_rand(0, $l - 1)];
   		}
   		return $c;
	}
}

if (!function_exists("encode_email_address")) {
	function encode_email_address($email) {
		$p = stripos($email, "@");
		if (!$p) {
			return "";
		}
		$return = $email[0];
		//从$email[1] -到@之前的字符替换成*号
		for ($i = 1; $i < $p; $i++) {
			$return .= '*';
		}
		for ($i; $i < strlen($email); $i++) {
			$return .= $email[$i];
		}
		return $return;
	}
}

	